bitkeeper revision 1.1131.1.2 (410fd451mjk_zz4-gJBfZHdAHnFx8A)
authorcl349@freefall.cl.cam.ac.uk <cl349@freefall.cl.cam.ac.uk>
Tue, 3 Aug 2004 18:07:13 +0000 (18:07 +0000)
committercl349@freefall.cl.cam.ac.uk <cl349@freefall.cl.cam.ac.uk>
Tue, 3 Aug 2004 18:07:13 +0000 (18:07 +0000)
Make page_to_phys return machine addresses.  Fixes s/g-merging for block
devices.

linux-2.6.7-xen-sparse/arch/xen/i386/mm/pgtable.c
linux-2.6.7-xen-sparse/drivers/xen/blkfront/blkfront.c
linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/dma-mapping.h
linux-2.6.7-xen-sparse/include/asm-xen/asm-i386/io.h

index be0d311556950d38b448e29de7ff8e415d8d9391..cbab491f2eee3f3e97d584a6fb85b8f52fb029ee 100644 (file)
@@ -195,7 +195,7 @@ struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
 #endif
        if (pte) {
                clear_highpage(pte);
-               __make_page_readonly(phys_to_virt(page_to_phys(pte)));
+               __make_page_readonly(phys_to_virt(page_to_pseudophys(pte)));
                                /* XXXcl highmem */
        }
        return pte;
index db9c6b4d621b7d7c61233eecb7cf2411870cc239..b0bb934b35331a637cc3744d96c405a6ce9aaeeb 100644 (file)
@@ -225,8 +225,7 @@ static int blkif_queue_request(struct request *req)
        ring_req->nr_segments = 0;
        rq_for_each_bio(bio, req) {
                bio_for_each_segment(bvec, bio, idx) {
-                       buffer_ma =
-                                phys_to_machine(page_to_phys(bvec->bv_page));
+                       buffer_ma = page_to_phys(bvec->bv_page);
                        if (unlikely((buffer_ma & ((1<<9)-1)) != 0))
                                BUG();
 
index 9d2f2cedd6f87b60dc6a175e1dcc525850c373d2..0ba88a13e5d3267fa86dc5a91108b53fff2b8b6a 100644 (file)
@@ -41,7 +41,7 @@ dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
        for (i = 0; i < nents; i++ ) {
                BUG_ON(!sg[i].page);
 
-               sg[i].dma_address = page_to_machine(sg[i].page) + sg[i].offset;
+               sg[i].dma_address = page_to_phys(sg[i].page) + sg[i].offset;
        }
 
        flush_write_buffers();
@@ -53,7 +53,7 @@ dma_map_page(struct device *dev, struct page *page, unsigned long offset,
             size_t size, enum dma_data_direction direction)
 {
        BUG_ON(direction == DMA_NONE);
-       return page_to_machine(page) + offset;
+       return page_to_phys(page) + offset;
 }
 
 static inline void
index 6d4c9e0f2e872b5a833123f44e71b575e09408d9..8701bcc5ce6c8abdfcc1fc793583339ee7a8f892 100644 (file)
@@ -85,8 +85,8 @@ static inline void * phys_to_virt(unsigned long address)
 /*
  * Change "struct page" to physical address.
  */
-#define page_to_phys(page)    ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT)
-#define page_to_machine(page) (phys_to_machine(page_to_phys(page)))
+#define page_to_pseudophys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT)
+#define page_to_phys(page)       (phys_to_machine(page_to_pseudophys(page)))
 
 extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags);